package com.rede.didiok.rank.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rede.didiok.common.dto.rank.RankDto;
import com.rede.didiok.rank.entity.RankEntity;
import com.rede.didiok.rank.vo.RankVo;

/**
 * 榜单，榜单的主体信息,一个榜单对应一条记录，一个榜单包含多个 rank_rank_member 记录
 *
 * @author Rede
 * @email didiok@foxmail.com
 * @date 2023-07-20 22:09:24
 */
public interface RankService extends IService<RankEntity> {

    /***************************** admin:start **************************/
    // region  didiok-admin

    /**
     * 获取每个榜单分类下的榜单数目
     * @return
     */
    List<Map<String, Object>> getRankCountByCategory();

    /**
     * 获取榜单列表
     *
     * @param rankDto
     * @return
     */
    public IPage<RankEntity> getPageList(RankDto rankDto);

    /**
     * 新增榜单
     *
     * @param rankDto
     */
    public String addRank(RankDto rankDto);

    /**
     * 编辑榜单
     *
     * @param rankDto
     */
    public String editRank(RankDto rankDto);

    /**
     * 批量删除榜单
     *
     * @param rankDtoList
     */
    public String deleteBatchRank(List<RankDto> rankDtoList);

    /**
     * 置顶榜单
     *
     * @param rankDto
     */
    public String stickRank(RankDto rankDto);

    /**
     * 通过引用量排序博客
     *
     * @return
     */
    public String rankSortByMemberCount();

    // endregion
    /***************************** admin:end **************************/



    /***************************** web:start **************************/
    // region didiok-web

    /**
     * 获取热门榜单
     *
     * @return
     */
    List<RankEntity> getHotRank(Integer hotRankCount);

    /**
     * 通过 catUid 获取榜单列表
     * @param catUid
     * @param currentPage
     * @param pageSize
     * @return
     */
    IPage<RankEntity> getListByCatUid(String catUid, Long currentPage, Long pageSize);

    /**
     * 获取全部博客标签列表
     *
     * @return
     */
    List<RankEntity> getList();

    // endregion
    /***************************** web:end **************************/


    /**
     * 删除和榜单分类有关的Redis缓存
     */
    void deleteRedisByRankCategory();

    /**
     * 删除和榜单有关的Redis缓存
     */
    void deleteRedisByRank();


    void updateDeleteStatusByUid(RankEntity rank);

    /**
     * 根据分类获取榜单列表
     * @param catUid
     * @return
     */
    List<RankVo> listRankByCategory(String catUid);

    /**
     * 批量：根据榜单uid列表，获取榜单信息
     * @param rankUids
     * @return
     */
    List<RankEntity> getRanksByIds(List<String> rankUids);

}

